home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import cups
- import cupshelpers
- import installpackage
- import os
- import subprocess
- from timedops import TimedOperation, TimedSubprocess
- from base import *
-
- class CheckPPDSanity(Question):
-
- def __init__(self, troubleshooter):
- Question.__init__(self, troubleshooter, 'Check PPD sanity')
- vbox = gtk.VBox()
- vbox.set_border_width(12)
- vbox.set_spacing(12)
- self.label = gtk.Label()
- self.label.set_line_wrap(True)
- self.label.set_use_markup(True)
- self.label.set_alignment(0, 0)
- vbox.pack_start(self.label, False, False, 0)
- box = gtk.HButtonBox()
- box.set_layout(gtk.BUTTONBOX_START)
- self.install_button = gtk.Button(_('Install'))
- box.add(self.install_button)
- vbox.pack_start(box, False, False, 0)
- troubleshooter.new_page(vbox, self)
-
-
- def display(self):
- self.answers = { }
- answers = self.troubleshooter.answers
- if not answers['cups_queue_listed']:
- return False
- parent = self.troubleshooter.get_window()
- name = answers['cups_queue']
- tmpf = None
-
- try:
- cups.setServer('')
- self.op = TimedOperation(cups.Connection, parent = parent)
- c = self.op.run()
- self.op = TimedOperation(c.getPPD, args = (name,), parent = parent)
- tmpf = self.op.run()
- except RuntimeError:
- answers['cups_queue_listed']
- answers['cups_queue_listed']
- return False
- except cups.IPPError:
- return False
- else:
- self.install_button.hide()
- title = None
- text = None
-
- try:
- ppd = cups.PPD(tmpf)
- self.answers['cups_printer_ppd_valid'] = True
-
- def options(options_list):
- o = { }
- for option in options_list:
- o[option.keyword] = option.defchoice
-
- return o
-
- defaults = { }
- for group in ppd.optionGroups:
- g = options(group.options)
- for subgroup in group.subgroups:
- g[subgroup.name] = options(subgroup.options)
-
- defaults[group.name] = g
-
- self.answers['cups_printer_ppd_defaults'] = defaults
- except RuntimeError:
- title = _('Invalid PPD File')
- self.answers['cups_printer_ppd_valid'] = False
-
- try:
- self.op = TimedSubprocess(parent = parent, args = [
- 'cupstestppd',
- '-rvv',
- tmpf], stdin = file('/dev/null'), stdout = subprocess.PIPE, stderr = subprocess.PIPE)
- result = self.op.run()
- self.answers['cupstestppd_output'] = result
- text = _("The PPD file for printer '%s' does not conform to the specification. Possible reason follows:") % name
- text += '\n' + reduce((lambda x, y: x + '\n' + y), result[0])
- except OSError:
- text = _("There is a problem with the PPD file for printer '%s'.") % name
- except:
- None<EXCEPTION MATCH>OSError
-
-
- None<EXCEPTION MATCH>OSError
-
- if tmpf:
- os.unlink(tmpf)
-
-
- if title == None and not answers['cups_printer_remote']:
- (pkgs, exes) = cupshelpers.missingPackagesAndExecutables(ppd)
- self.answers['missing_pkgs_and_exes'] = (pkgs, exes)
- if len(pkgs) > 0 or len(exes) > 0:
- title = _('Missing Printer Driver')
- if len(pkgs) > 0:
-
- try:
- self.packagekit = installpackage.PackageKit()
- pkgs = []
-
-
- if len(pkgs) > 0:
- self.package = pkgs[0]
- text = _("Printer '%s' requires the %s package but it is not currently installed.") % (name, self.package)
- self.install_button.show()
- else:
- text = _("Printer '%s' requires the '%s' program but it is not currently installed.") % (name, exes + pkgs[0])
-
-
- if title != None:
- self.label.set_markup('<span weight="bold" size="larger">' + title + '</span>\n\n' + text)
-
- return title != None
-
-
- def connect_signals(self, handle):
- self.button_sigid = self.install_button.connect('clicked', self.install_clicked)
-
-
- def disconnect_signals(self):
- self.install_button.disconnect(self.button_sigid)
-
-
- def collect_answer(self):
- return self.answers
-
-
- def cancel_operation(self):
- self.op.cancel()
-
-
- def install_clicked(self, button):
- pkgs = self.answers.get('packages_installed', [])
- pkgs.append(self.package)
- self.answers['packages_installed'] = pkgs
-
- try:
- self.packagekit.InstallPackageName(0, 0, self.package)
- except:
- pass
-
-
-
-